/*
 * Copyright 2008 Jeff Dwyer
 * 
 * Licensed under the Apache License, Version 2.0 (the "License"); you may not
 * use this file except in compliance with the License. You may obtain a copy of
 * the License at
 * 
 * http://www.apache.org/licenses/LICENSE-2.0
 * 
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
 * License for the specific language governing permissions and limitations under
 * the License.
 */
/*
 * Simple Date Picker Widget for GWT library of Google, Inc.
 * 
 * Copyright (c) 2006 Parvinder Thapar
 * http://psthapar.googlepages.com/
 * 
 * This library is free software; you can redistribute 
 * it and/or modify it under the terms of the GNU Lesser 
 * General Public License as published by the Free Software 
 * Foundation; either version 2.1 of the License, or 
 * (at your option) any later version. This library is 
 * distributed in the hope that it will be useful, but 
 * WITHOUT ANY WARRANTY; without even the implied warranty of 
 * MERCHANTABILITY  or FITNESS FOR A PARTICULAR PURPOSE.
 * See the GNULesser General Public License for more details. 
 * You should have received a copy of the GNU Lesser General 
 * PublicLicense along with this library; if not, write to the 
 * Free Software Foundation, Inc.,  
 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA  
 */

package com.apress.progwt.client.widget.datepicker;

/*
 * DateFormatter, as its name suggests, is the object which formats the
 * date in a particular way. Currently, it supports 3 different formats:
 * MMDDYYYY, DDMMYYYY and DDMONYYYY
 */
import java.util.Date;

public class DateFormatter implements DateConstants {
    public final static DateFormat DATE_FORMAT_MMDDYYYY = DateFormat.DATE_FORMAT_MMDDYYYY;
    public final static DateFormat DATE_FORMAT_DDMMYYYY = DateFormat.DATE_FORMAT_DDMMYYYY;
    public final static DateFormat DATE_FORMAT_DDMONYYYY = DateFormat.DATE_FORMAT_DDMONYYYY;

    private DateFormat dateFormat = null;

    public DateFormatter(DateFormat dateFormat) {
        this.dateFormat = dateFormat;
    }

    /*
     * formatDate
     * 
     * Formats the date in the format asked
     * 
     * @param Date (Date to be formatted) @param int (format in which to
     * format the date) @return String
     */
    public String formatDate(Date date) {
        String dateStr = "";

        switch (this.dateFormat.getDateFormat()) {
        case DateFormat.MMDDYYYY:
            dateStr = formatDate_MMDDYYYY(date);
            break;

        case DateFormat.DDMMYYYY:
            dateStr = formatDate_DDMMYYYY(date);
            break;

        case DateFormat.DDMONYYYY:
            dateStr = formatDate_DDMONYYYY(date);
            break;

        }
        return dateStr;
    }

    /*
     * getDateFormat
     * 
     * @return Returns the dateFormat
     */
    public DateFormat getDateFormat() {
        return dateFormat;
    }

    /*
     * setDateFormat
     * 
     * @param Sets the dateFormat
     */
    public void setDateFormat(DateFormat dateFormat) {
        this.dateFormat = dateFormat;
    }

    /*
     * formatDate_MMDDYYYY
     * 
     * Formates the given date in MMDDYYYY format
     * 
     * @param (Date to be formatted) @return String
     */
    private String formatDate_MMDDYYYY(Date date) {
        StringBuffer dateStr = new StringBuffer();
        if (date.getMonth() < 9) {
            dateStr.append("0");
        }
        dateStr.append((date.getMonth() + 1));
        dateStr.append("/");

        if (date.getDate() < 10) {
            dateStr.append("0");
        }
        dateStr.append(date.getDate());
        dateStr.append("/");

        dateStr.append((date.getYear() + 1900));
        return dateStr.toString();
    }

    /*
     * formatDate_DDMMYYYY
     * 
     * Formats the date in DDMMYYYY format
     * 
     * @param (Date to be formatted) @return String
     */
    private String formatDate_DDMMYYYY(Date date) {
        StringBuffer dateStr = new StringBuffer();
        if (date.getDate() < 10) {
            dateStr.append("0");
        }
        dateStr.append(date.getDate());
        dateStr.append("/");

        if (date.getMonth() < 9) {
            dateStr.append("0");
        }
        dateStr.append((date.getMonth() + 1));
        dateStr.append("/");

        dateStr.append((date.getYear() + 1900));
        return dateStr.toString();
    }

    /*
     * formatDate_DDMONYYYY
     * 
     * Formats the date in DDMONYYYY format
     * 
     * @param (Date to be formatted) @return String
     */
    private String formatDate_DDMONYYYY(Date date) {
        StringBuffer dateStr = new StringBuffer();
        if (date.getDate() < 10) {
            dateStr.append("0");
        }
        dateStr.append(date.getDate());
        dateStr.append(" ");

        dateStr.append(MONTHS[date.getMonth()]);
        dateStr.append(" ");

        dateStr.append((date.getYear() + 1900));
        return dateStr.toString();
    }
}
